package com.lqk.spring.test;

import org.springframework.expression.Expression;
import org.springframework.expression.spel.standard.SpelExpressionParser;



/**
 * @author lqk
 * @date 2021/12/11 18:18
 *
 * 解释器模式在Spring框架应用的源码剖析
 *  3) 说明
 *  - Expression 接口 表达式接口
 *  - 下面有不同的实现类，比如SpelExpression, 或者CompositeStringExpression。 - 使用时候，根据你创建的不同的Parser 对象，返回不同的 Expression 对象
 *  public Expression parseExpression(String expressionString, ParserContext context)
 *  throws ParseException {
 *  if (context == null) {
 *  context = NON_TEMPLATE_PARSER_CONTEXT;
 *  }
 *  if (context.isTemplate()) {
 *  return parseTemplate(expressionString, context); //返回的就是 CompositeStringExpression
 *  }
 *  else {
 *  return doParseExpression(expressionString, context); //返回的就是 SpelExpression
 *  }}- 使用得当 Expression对象，调用getValue 解释执行 表达式，最后得到结果
 */
public class Interpreter {
    public static void main(String[] args) {
        SpelExpressionParser parser = new SpelExpressionParser();
        Expression expression = parser.parseExpression("10 * (2 + 1) * 1 + 66");    // 96
        int result = (Integer) expression.getValue();
        System.out.println(result);
    }
}
